home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 3.2
/
Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO
/
packet
/
n17jsrc
/
uudecode.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-12-11
|
2KB
|
64 lines
/* This is a junky piece of C designed to take a uuencoded file
as the first parameter and decode it into the file given as
the second parameter. there is no error checking or other
warning if it encounters a problem. The purpose of this
program is to act as a simple bootstrap to enable the initial
transfer of a file to allow more advanced binary transfers.
In particular, note that the first line of the file to be
decoded should be the 'begin' line produced by a uuencode.
This code (for what it is worth) is Copyright 1990, by
David R. Evans, NQ0I.
*/
#define byte unsigned char
#include <stdio.h>
#include <string.h>
main(argc, argv)
int argc;
char** argv;
{ char line[100];
FILE *infile, *outfile;
/* open the files */
infile = fopen(argv[1], "r");
outfile = fopen(argv[2], "w");
/* skip the first (begin) line */
fgets(line, 100, infile);
/* decode the remainder of the file */
while (fgets(line, 100, infile), strncmp(line, "end", 3))
{ int n_to_write, n_to_read, n_reads, n, m;
byte b[4], out[3];
n_to_write = (int)line[0] - 32;
n_to_read = ((n_to_write + 2) / 3) * 4;
if(strlen(line) - 2 < n_to_read) /* EOF apparently */
n_to_read = 0;
n_reads = n_to_read / 4;
for (n = 0; n < n_reads; n++)
{ for (m = 0; m < 4; m++)
b[m] = line[1 + 4 * n + m] - 32;
/* now do the actual decode */
out[0] = (b[0] << 2) | ((b[1] & 0x30) >> 4);
out[1] = ((b[1] & 0x0f) << 4) | ((b[2] & 0x3c) >> 2);
out[2] = ((b[2] & 0x03) << 6) | (b[3]);
if(n_to_write > 3)
for (m = 0; m < 3; m++)
fputc(out[m], outfile);
else
for (m = 0; m < n_to_write; m++)
fputc(out[m], outfile);
n_to_write -= m;
}
}
fflush(outfile);
}